In this analysis, we examine how different property characteristics might affect the demand for Airbnb listings in Berlin. Instead of using a trained machine learning model (which was showing signs of severe overfitting), we’ve created synthetic simulations that demonstrate the expected relationships between property characteristics and demand.
Our previous Random Forest model showed signs of severe overfitting, with an R-squared value of 0.9988 and extremely low variation in predictions. To provide more meaningful insights, we’ve shifted to a synthetic data approach that:
This approach allows us to demonstrate the likely impact of different property characteristics on demand, based on reasonable market assumptions.
A full explanation of the simulation approach is available in the simulation explanation document.
The simulation results show the predicted demand when modifying various property characteristics:
# Try first the analysis path, then the main results path as backup
simulation_results_file <- ifelse(
file.exists(file.path(analysis_results_path, "demand_simulation_results.csv")),
file.path(analysis_results_path, "demand_simulation_results.csv"),
file.path(results_path, "demand_simulation_results.csv")
)
simulation_results <- read.csv(simulation_results_file)
# Display the first few rows of the simulation data
kable(head(simulation_results, 10), caption = "Demand Simulation Results") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F)| Modified_Value | Predicted_Demand | Feature |
|---|---|---|
| 3 | 0.3831857 | overall_rating |
| 3.1 | 0.4080947 | overall_rating |
| 3.2 | 0.4767612 | overall_rating |
| 3.3 | 0.4471153 | overall_rating |
| 3.4 | 0.4638786 | overall_rating |
| 3.5 | 0.5264519 | overall_rating |
| 3.6 | 0.5038275 | overall_rating |
| 3.7 | 0.4670482 | overall_rating |
| 3.8 | 0.4993944 | overall_rating |
| 3.9 | 0.5216301 | overall_rating |
The combined plot shows the predicted demand for different property characteristics:
# First try to locate the combined plot in the analysis results directory
combined_plot_path <- file.path(analysis_results_path, "simulation_combined.png")
if (!file.exists(combined_plot_path)) {
# If not found, try the main results directory
combined_plot_path <- file.path(results_path, "simulation_combined.png")
}
# Display the combined plot
if (file.exists(combined_plot_path)) {
knitr::include_graphics(combined_plot_path)
} else {
print("Combined simulation plot not found.")
}Let’s examine the individual effects of key features:
# Try to locate the plot in the analysis results directory
plot_path <- file.path(analysis_results_path, "simulation_overall_rating.png")
if (!file.exists(plot_path)) {
# If not found, try the main results directory
plot_path <- file.path(results_path, "simulation_overall_rating.png")
}
# Display the plot
if (file.exists(plot_path)) {
knitr::include_graphics(plot_path)
} else {
print("Overall rating simulation plot not found.")
}# Try to locate the plot in the analysis results directory
plot_path <- file.path(analysis_results_path, "simulation_cleanliness_rating.png")
if (!file.exists(plot_path)) {
# If not found, try the main results directory
plot_path <- file.path(results_path, "simulation_cleanliness_rating.png")
}
# Display the plot
if (file.exists(plot_path)) {
knitr::include_graphics(plot_path)
} else {
print("Cleanliness rating simulation plot not found.")
}# Try to locate the plot in the analysis results directory
plot_path <- file.path(analysis_results_path, "simulation_communication_rating.png")
if (!file.exists(plot_path)) {
# If not found, try the main results directory
plot_path <- file.path(results_path, "simulation_communication_rating.png")
}
# Display the plot
if (file.exists(plot_path)) {
knitr::include_graphics(plot_path)
} else {
print("Communication rating simulation plot not found.")
}# Try to locate the plot in the analysis results directory
plot_path <- file.path(analysis_results_path, "simulation_reviews.png")
if (!file.exists(plot_path)) {
# If not found, try the main results directory
plot_path <- file.path(results_path, "simulation_reviews.png")
}
# Display the plot
if (file.exists(plot_path)) {
knitr::include_graphics(plot_path)
} else {
print("Reviews simulation plot not found.")
}# Try to locate the plot in the analysis results directory
plot_path <- file.path(analysis_results_path, "simulation_price.png")
if (!file.exists(plot_path)) {
# If not found, try the main results directory
plot_path <- file.path(results_path, "simulation_price.png")
}
# Display the plot
if (file.exists(plot_path)) {
knitr::include_graphics(plot_path)
} else {
print("Price simulation plot not found.")
}# Try to locate the plot in the analysis results directory
plot_path <- file.path(analysis_results_path, "simulation_room_type.png")
if (!file.exists(plot_path)) {
# If not found, try the main results directory
plot_path <- file.path(results_path, "simulation_room_type.png")
}
# Display the plot
if (file.exists(plot_path)) {
knitr::include_graphics(plot_path)
} else {
print("Room type simulation plot not found.")
}# Try to locate the plot in the analysis results directory
plot_path <- file.path(analysis_results_path, "simulation_is_superhost.png")
if (!file.exists(plot_path)) {
# If not found, try the main results directory
plot_path <- file.path(results_path, "simulation_is_superhost.png")
}
# Display the plot
if (file.exists(plot_path)) {
knitr::include_graphics(plot_path)
} else {
print("Superhost status simulation plot not found.")
}# Try to locate the plot in the analysis results directory
plot_path <- file.path(analysis_results_path, "simulation_property_type.png")
if (!file.exists(plot_path)) {
# If not found, try the main results directory
plot_path <- file.path(results_path, "simulation_property_type.png")
}
# Display the plot
if (file.exists(plot_path)) {
knitr::include_graphics(plot_path)
} else {
print("Property type simulation plot not found.")
}Our synthetic simulations provide valuable insights into how different property characteristics are expected to affect demand for Airbnb listings in Berlin:
These simulations provide a clear and intuitive understanding of the market dynamics, even without relying on a potentially overfit model. They represent expected relationships based on reasonable assumptions about the Airbnb marketplace.